﻿using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;

namespace Persistente.Postagem
{
    public class PPostagem
    {
        private DB_SIMETRIA _db;
        private SqlConnection _conexao = new SqlConnection(ConfigurationManager.ConnectionStrings["DB_SIMETRIA_SQL"].ConnectionString);
        public int Salvar(DateTime dtPostagem, DateTime dtPostagemGmt, string tePostagem, string teTitulo, string csStatus, int qtComentarios, string csTipoPostagem, string boAceitaComentario, string teTextoLink, int idUsuario)
        {
            try
            {
                _db = new DB_SIMETRIA();
                var tbPostagem = new tb_postagem();
                tbPostagem.dt_postagem = dtPostagem;
                tbPostagem.dt_postagem_gmt = dtPostagemGmt;
                tbPostagem.te_postagem = tePostagem;
                tbPostagem.te_titulo = teTitulo;
                tbPostagem.cs_status = csStatus;
                tbPostagem.qt_comentarios = qtComentarios;
                tbPostagem.cs_tipo_postagem = csTipoPostagem;
                tbPostagem.bo_aceita_comentario = boAceitaComentario;
                tbPostagem.te_texto_link = teTextoLink;
                tbPostagem.usuario_id_usuario = idUsuario;

                _db.AddTotb_postagem(tbPostagem);
                _db.SaveChanges();


                return tbPostagem.id_postagem;

            }
            catch (Exception e)
            {
                throw;
            }
            finally
            {
                _db.Connection.Close();
            }

        }

        public bool Remover(int idPostagem)
        {
            try
            {
                _db = new DB_SIMETRIA();
                var obTbPostagem = _db.tb_postagem.Where(q => q.id_postagem == idPostagem).FirstOrDefault();
                if (obTbPostagem == null)
                {
                    return false;
                }
                else
                {
                    _db.tb_postagem.DeleteObject(obTbPostagem);
                    _db.SaveChanges();
                    return true;
                }

            }
            catch (Exception e)
            {
                throw;
            }
            finally
            {
                _db.Connection.Close();
            }
        }

        public DataSet pegarPostagens(DateTime? dtPostagem = null, DateTime? dtPostagemGmt = null, string tePostagem =null, string teTitulo =null,
            string csStatus =null, int qtComentarios = 0, string csTipoPostagem = null, string boAceitaComentario = null, string teTextoLink = null, int idUsuario = 0)
        {

            var ds = new DataSet();

            string query = "SELECT ";
            query += "  p.id_postagem";
            query += ", p.dt_postagem";
            query += ", p.dt_postagem_gmt";
            query += ", p.te_postagem";
            query += ", p.te_titulo";
            query += ", p.cs_status";
            query += ", p.qt_comentarios";
            query += ", p.cs_tipo_postagem";
            query += ", p.bo_aceita_comentario";
            query += ", p.te_texto_link";
            query += ", u.id_usuario";
            query += ", u.nm_usuario";
            query += " FROM tb_postagem p";
            query += " , tb_usuario u";
            query += " WHERE p.usuario_id_usuario = u.id_usuario ";

            if (dtPostagem != null)
            {
                query += " AND dt_postagem = '" + dtPostagem + "'";
            }

            if (dtPostagemGmt != null)
            {
                query += " AND dt_postagem_gmt = '" + dtPostagemGmt + "'";
            }

            if (!string.IsNullOrEmpty(tePostagem))
            {
                query += " AND te_postagem LIKE '%" + tePostagem + "%'";
            }

            if (!string.IsNullOrEmpty(teTitulo))
            {
                query += " AND te_titulo LIKE '%" + teTitulo + "%'";
            }

            if (!string.IsNullOrEmpty(csStatus))
            {
                query += " AND cs_status = '" + csStatus + "'";
            }

            if (qtComentarios != 0)
            {
                query += " AND qt_comentarios = " + qtComentarios;
            }

            if (!string.IsNullOrEmpty(csTipoPostagem))
            {
                query += " AND cs_tipo_postagem = '" + csTipoPostagem + "'";
            }

            if (!string.IsNullOrEmpty(boAceitaComentario))
            {
                query += " AND bo_aceita_comentario = '" + boAceitaComentario + "'";
            }

            if (!string.IsNullOrEmpty(teTextoLink))
            {
                query += " AND te_texto_link LIKE '%" + teTextoLink + "%'";
            }

            if (idUsuario != 0)
            {
                query += " AND u.id_usuario = " + idUsuario;
            }


            var cmd = new SqlCommand(query, _conexao);

            cmd.Connection = _conexao;

            if (_conexao.State == ConnectionState.Closed)
            {
                _conexao.Open();
            }

            var dataAdapter = new SqlDataAdapter(cmd);
            dataAdapter.Fill(ds);

            _conexao.Close();

            return ds;
        }

        public tb_postagem pegarPostagemPorId(int idPostagem)
        {
            try
            {
                _db = new DB_SIMETRIA();
                return _db.tb_postagem.Where(q => q.id_postagem == idPostagem).FirstOrDefault();
            }
            catch (Exception e)
            {
                throw;
            }
            finally
            {
                _db.Connection.Close();
            }
        }

        public int contarPostagensPorTitulo(string teTitulo, int idPostagem = 0)
        {
            try
            {
                _db = new DB_SIMETRIA();
                if (idPostagem == 0)
                {
                    return _db.tb_postagem.Where(q => q.te_titulo == teTitulo).Count();
                }
                else
                {
                    return _db.tb_postagem.Where(q => q.te_titulo == teTitulo && q.id_postagem != idPostagem).Count();
                }
            }
            catch (Exception e)
            {
                throw;
            }
            finally
            {
                _db.Connection.Close();
            }
        }

        public bool Alterar(int idPostagem, tb_postagem obTbPostagemNovo)
        {
            try
            {
                _db = new DB_SIMETRIA();
                var obTbPostagemVelho =
                    _db.tb_postagem.Where(q => q.id_postagem == idPostagem).FirstOrDefault();

                obTbPostagemVelho.dt_postagem = obTbPostagemNovo.dt_postagem;
                obTbPostagemVelho.dt_postagem_gmt = obTbPostagemNovo.dt_postagem_gmt;
                obTbPostagemVelho.te_postagem = obTbPostagemNovo.te_postagem;
                obTbPostagemVelho.te_titulo = obTbPostagemNovo.te_titulo;
                obTbPostagemVelho.cs_status = obTbPostagemNovo.cs_status;
                obTbPostagemVelho.qt_comentarios = obTbPostagemNovo.qt_comentarios;
                obTbPostagemVelho.cs_tipo_postagem = obTbPostagemNovo.cs_tipo_postagem;
                obTbPostagemVelho.bo_aceita_comentario = obTbPostagemNovo.bo_aceita_comentario;
                obTbPostagemVelho.te_texto_link = obTbPostagemNovo.te_texto_link;
                obTbPostagemVelho.usuario_id_usuario = obTbPostagemNovo.usuario_id_usuario;

                _db.SaveChanges();
                return true;
            }
            catch (Exception e)
            {
                throw;
            }
            finally
            {
                _db.Connection.Close();
            }
        } 
    }
}
